package com.ruoyi.merchant.service.impl;

import com.ruoyi.common.core.cg.pojo.Group;
import com.ruoyi.common.core.cg.pojo.LeaderGroup;
import com.ruoyi.common.core.cg.pojo.LeaderTemplate;
import com.ruoyi.common.core.cg.pojo.Template;
import com.ruoyi.merchant.mapper.LeaderTemplateMapper;
import com.ruoyi.merchant.mapper.TemplateMapper;
import com.ruoyi.merchant.service.TemplateService;
import com.ruoyi.merchant.utils.QiniuUtils;
import com.ruoyi.merchant.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.UUID;

@Service
@Slf4j
public class TemplateServiceImpl implements TemplateService {

    @Autowired
    private TemplateMapper templateMapper;
    @Autowired
    private LeaderTemplateMapper leaderTemplateMapper;

    /**
     * 根据负责人ID获取模板列表
     *
     * @param leaderId 负责人ID
     * @return 模板列表
     */
    @Override
    public List<Template> findTemplatesByLeaderId(Integer leaderId) {
        return templateMapper.selectTemplatesByLeaderId(leaderId);
    }

    /**
     * 添加新的模板
     *
     * @param template 要添加的模板对象
     * @return 包含操作结果的ResponseEntity对象
     */
    @Override
    @Transactional
    public Template addTemplate(Template template) {
        templateMapper.insertTemplate(template);
        return template;
    }

    /**
     * 将模板关联到指定的负责人
     *
     * @param leaderId   负责人ID
     * @param templateId 模板ID
     * @return 包含操作结果的ResponseEntity对象
     */
    @Override
    @Transactional
    public void associateTemplateToLeader(Integer leaderId, Integer templateId) {
        leaderTemplateMapper.insertLeaderTemplate(leaderId, templateId);
    }

    /**
     * 删除模板 根据模板ID
     * @param templateId
     */
    @Override
    @Transactional
    public void deleteTemplate(Integer templateId) {
        // 删除关联关系
        leaderTemplateMapper.deleteLeaderTemplateByTemplateId(templateId);
        // 删除模板
        templateMapper.deleteTemplateById(templateId);
    }

    /**
     *
     * @param template
     * @return
     */
    @Override
    @Transactional
    public Template updateTemplate(Template template) {
        templateMapper.updateTemplate(template);
        return template;
    }

    @Override
    public Result saveGroup(Template template, MultipartFile surfacePlotFile, MultipartFile firstImgFile, MultipartFile secondImgFile) {
        try {
            // 上传封面图
            if (surfacePlotFile != null && !surfacePlotFile.isEmpty()) {
                String surfacePlotUrl = uploadToQiniu(surfacePlotFile);
                template.setSurfacePlot(surfacePlotUrl);
            }

            // 上传第一张配图
            if (firstImgFile != null && !firstImgFile.isEmpty()) {
                String firstImgUrl = uploadToQiniu(firstImgFile);
                template.setFirstImg(firstImgUrl);
            }

            // 上传第二张配图
            if (secondImgFile != null && !secondImgFile.isEmpty()) {
                String secondImgUrl = uploadToQiniu(secondImgFile);
                template.setSecondImg(secondImgUrl);
            }

            template.setStatus(5);
            // 保存团信息到数据库
            int saveGroup = templateMapper.saveTemplate(template);
            Integer groupId = template.getId();
            LeaderTemplate leaderTemplate = new LeaderTemplate();
            leaderTemplate.setTemplateId(groupId);
            leaderTemplate.setLeaderId(template.getLeaderId());
            log.info("group：" + groupId + " leader：" + template.getLeaderId());
            leaderTemplateMapper.saveLeaderTemplate(leaderTemplate);
            return Result.ok(saveGroup);
        } catch (Exception e) {
            log.error("保存团信息失败", e);
            return Result.error("保存团信息失败");
        }
    }



    private String uploadToQiniu(MultipartFile file) throws Exception {
        if (file == null || file.isEmpty()) {
            log.error("上传文件为空: " + file);
            throw new IllegalArgumentException("上传的文件不能为空");
        }

        log.info("开始上传文件: " + file.getOriginalFilename());

        byte[] fileBytes = file.getBytes();
        String fileName = UUID.randomUUID().toString().replaceAll("-","");
        String oname = file.getOriginalFilename();
        String suffix = oname.substring(oname.lastIndexOf("."));
        fileName += suffix;
        String fileKey = QiniuUtils.upload2Qiniu(fileBytes, fileName);

        // 去除文件 URL 的协议部分（http:// 或 https://）
        if (fileKey.startsWith("http://") || fileKey.startsWith("https://")) {
            fileKey = fileKey.substring(fileKey.indexOf("/", fileKey.indexOf("://") + 3));
        }

        String fileUrl = "http://stcn3inqu.hb-bkt.clouddn.com/" + fileKey;
        log.info("上传文件成功, URL: " + fileUrl);

        return fileUrl;
    }
    @Override
    public List<Template> queryTemplate(int lid) {
        List<Template> templates = templateMapper.queryTemplate(lid);
        return templates;
    }

    @Override
    public Result deleteLeaderGroup(Integer id, Integer lid) {
        templateMapper.deleteLeaderGroup(id,lid);
        return Result.ok();
    }
}
